\hspace*{10pt}Durante el desarrollo de este trabajo pr\'actico nos encontramos ante algunas dificultades.
El hecho de participar en un proyecto de estas caracter\'sticas nos hizo tener que replantear
varias cosas sobre $Assembler$, aprender el uso de instrucciones que no conoc\'iamos. Surgieron
dudas y recurrimos a docentes y a los manuelas de Intel. Las consultas no s\'olo fueron por
nuestra parte sino tambi\'en de los dem\'as grupos lo cual mostr\'o que la mayor\'ia de las
dudas eran comunes a todos. Gracias a la lista pudimos ir unificando conceptos y compartiendo
herramientas y formas de aplicar instrucciones entre los grupos, y el hecho de que otros hubieran
evacuado sus dudas antes que nosotros hizo que, al momento de avanzar sobre algunos puntos, ya
supieramos como tratar los problemas.\\
\hspace*{10pt}Un arma de doble filo con la que nos topamos a menudo fue el famoso ''copy-paste''. En muchos
lugares de nuestro c\'odigo reutiliz\'abamos algunas cosas que no val\'ian la pena codificar como
funciones, ya fuese por eficiencia, por no tener importancia suficiente o por claridad en la
lectura. Si bien podr\'iamos haber usado macros, decidimos que la manera mas c\'omoda para
solucionar la situaci\'on sin pisar datos importantes o tocar registros err\'oneos era copiar,
pegar y reemplazar lo que correspond\'ia. As\'i cometimos errores por mal uso de registros y
claramente tuvimos que prestar mucha atenci\'on y examinar repetidas veces el c\'odigo para hallar
errores menores que derivaban en bugs importantes de nuestro programa.\\
\hspace*{10pt}Por otra parte, la recomendaci\'on de utilizar SVN fue de gran ayuda durante el TP. Si bien no
utilizamos con frecuencia las opciones de merge, el hecho de tener siempre disponible y
autom\'oticamente versionado el c\'odigo fue de gran utilidad.\\
\hspace*{10pt}La experiencia personal del grupo fue de consenso pr\'acticamente para todas las decisiones que
tomamos. Creemos que el factor fundamental para esto fue que hayamos trabajado gran parte del
tiempo juntos, viendo todos en pantalla exactamente lo mismo y explicando lo que alguno no
entend\'ia. De esta manera no hubo inconsistencias en el cuerpo del trabajo, y si bien muchas
veces tuvimos que dar un paso atr\'as por haber tomado caminos err\'oneos y volver a empezar,
siempre lo hicimos estando convencidos de que lo que est\'abamos realizando lo hac\'iamos para
avanzar correctamente.\\
\hspace*{10pt}En cuanto a los tests, debemos mencionar que la herramientas de debug y testing fueron
fundamentales. Para el debug usamos GDB por medio de la interfaz gr\'afica ''Data Display Debugger'' (DDD).
Como se puede ver en cada instrucci\'on c\'omo van quedando los registros, nos fue m\'as f\'acil
hallar errores de cuentas. La mayor\'ia de ellos proven\'ian de suponer que una instrucci\'on se
comportaba de una manera o de otra. Muchas veces hasta incluso leyendo el manual nos costaba
interpretar lo que est\'abamos haciendo. Con esa herramienta pudimos avanzar cu\'ando ya no
ten\'iamos dudas sobre el c\'odigo pero los filtros no daban el resultado esperado.\\
\hspace*{10pt}Para el testeo, usamos las herramientas que nos facilit\'o la c\'atedra. Nos ha pasado de generar
los filtros por consola y creer que funcionaban, pero en realidad hab\'ia diferencias de p\'ixeles
que \'unicamente aparec\'ian en el tester. Con esa herramienta pudimos ir puliendo el c\'odigo
hasta lograr error igual a cero en la mayor\'ia de los casos. Obviamente eso no era todo, ya que si perd\'iamos memoria el trabajo realizado no serv\'ia. Para
verificar que no fall\'abamos en eso, usamos la herramienta Valgrind.\\ 
\hspace*{10pt}Hay funciones en las que convertir de entero a float para hacer alguna division y volver a pasar a
entero, genera un margen de error, ya que acota se acota el n\'umero para pasarlo a entero. 
Esto ocurre en las funciones combinar,nomalizar local y efecto ondas. Los tests tienen en cuenta este error que puede suceder y se fijan que la diferencia entre dos pixeles sea menor o igual a 5.
\\

\hspace*{10pt}El lenguaje Ensamblador fue, para nosotros, algo nuevo y distinto a lo que ven\'iamos viendo,
as\'i que aprender el correcto uso de las instrucciones y la manera de aplicar las estructuras de
control nos demand\'o bastante tiempo. Durante todo el proyecto recurrimos a los manuales de Intel
citados en la bibliograf\'ia de la materia, y a ejemplos y explicaciones esparcidas por Internet.\\
\hspace*{10pt}Respecto al uso del lenguaje Ensamblador, podemos decir que programar a bajo nivel fue muy \'util a
la hora de trabajar con informaci\'on a nivel de byte o incluso bit. Si bien estas manipulaciones
de datos pueden lograrse con lenguajes de un nivel un poco m\'as alto, como sea $C$, resulta muchas
veces m\'as artificial y dificultoso que hacerlo en ensamblador. Adem\'as, utilizando $ASM$
correctamente puede generarse c\'odigo m\'as eficiente que el generado por el compilador de un
lenguaje de alto nivel optimizado, pues, por ejemplo, se pueden minimizar los accesos a memoria si
se saben utilizar los registros del procesador. Si bien que escribir en $Assembler$ es trabajoso y
los seguimientos y \textsl{debuging} de las funciones son arduos y, a veces, consumen demasiado
tiempo; si procedemos con organizaci\'on y planeamiento podemos asegurarnos de que los algoritmos
est\'an bien hechos y obtener resultados satisfactorios que mejoren ampliamente resultados
obtenidos con otros lenguajes de alto nivel.\\ 
\hspace*{10pt}Como se puede apreciar en los gr\'aficos de cada una de las funciones en la secci\'on $Resultados$,
existe una diferencia abismal entre las implementaciones en $C$ y $ASM$ para cada filtro a favor
de la implementaci\'on en $Assembler$. La diferencia se va acentuando cada vez m\'as con el tama\~no
de la imagen y el paso del tiempo (en cantidad de ticks de reloj). El paralelismo de $ASM$ se ve
reflejado y demuestra mejor performance para aplicar las funciones a mayores vol\'umenes de datos
versus el trabajo en serie del lenguaje $C$. Si bien la diferencia sigue siendo mayor en casos de
im\'agenes m\'as peque\~nas, quiz\'as no se note tanto como s\'i se aprecia en casos en los que
interviene mucha informaci\'on.\\
